package com.lp.biz.train.service;

import com.lp.biz.train.model.query.TrainChapterQuery;
import com.lp.biz.train.model.query.TrainClassQuery;
import com.lp.biz.train.model.query.TrainHomeworkQuery;
import com.lp.biz.train.model.query.TrainMembersQuery;
import com.lp.biz.train.model.vo.*;
import com.lp.common.annotation.PermissionAnnotation;
import com.lp.common.entity.PageParams;
import com.lp.common.utils.CommonResult;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * BizCoreContent 服务类
 * @program: backend
 * @author Ke.Song
 * @since 2024-05-02 10:45:20
 */
public interface BizTrainService {

    /**
     * 获取训练营列表
     * @param params 分页参数
     * @return 查询结果
     */
    CommonResult getTrainList(PageParams params);

    /**
     * 创建训练营
     * @param createTrain 创建参数
     */
    void createTrain(CreateTrain createTrain);

    /**
     * 删除训练营
     * @param trainId 训练营id
     */
    void deleteTrain(Integer trainId);

    /**
     * 训练营上架/下架
     * @param trainId 训练营ID
     */
    void trainDisplay(Integer trainId);

    /**
     * 获取训练营详情
     * @param trainId 训练营id
     * @return 查询结果
     */
    CommonResult getTrainDetail(Integer trainId);

    /**
     * 获取训练营班级
     *
     * @param params 分页参数
     * @return 查询结果
     */
    CommonResult getTrainClasses(TrainClassQuery params);

    /**
     * 创建班级
     * @param trainId 训练营ID
     * @param createClass 班级参数
     */
    void addOrUpdateClass(Integer trainId, CreateClass createClass);

    /**
     * 上架/下架班级
     * @param trainId 训练营ID
     * @param classId 班级id
     */
    void displayClass(Integer trainId, Integer classId);

    /**
     * 获取训练营下班级信息
     * @param classId 班级id
     * @param trainId 训练营id
     * @return 查询结果
     */
    CommonResult getTrainClass(Integer classId, Integer trainId);

    /**
     * 获取训练营的章节
     * @param trainId 训练营id
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getTrainChapterList(Integer trainId, TrainChapterQuery query);

    /**
     * 创建/更新章节
     * @param trainId 训练营id
     * @param params 章节参数
     */
    void addOrUpdateChapter(Integer trainId, TrainChapterCreate params);

    /**
     * 删除章节
     * @param trainId 训练营ID
     * @param chapterId 章节ID
     */
    void deleteChapter(Integer trainId, Integer chapterId);

    /**
     * 获取章节详情
     * @param chapterId 章节ID
     * @param trainId 训练营ID
     * @return 查询结果
     */
    CommonResult getChapter(Integer chapterId, Integer trainId);

    /**
     * 训练营章节上架/下架
     * @param chapterId 章节id
     */
    void displayChapter(Integer chapterId);

    /**
     * 获取训练营下的用户
     * @param trainId 训练营Id
     * @param query 查询参数
     * @return 查询结果
     */
    CommonResult getAllMembers(Integer trainId, TrainMembersQuery query);

    /**
     * 删除训练营下的用户班级
     *
     * @param trainId       训练营Id
     * @param membersDelete 删除参数
     */
    void deleteTrainMembers(Integer trainId, TrainMembersDelete membersDelete);

    /**
     * 获取训练营下可选管理
     *
     * @param trainId  训练营Id
     * @param name     助教名
     * @param category 管理分类
     * @return 查询结果
     */
    CommonResult getOptionalManage(Integer trainId, String name, String category);

    /**
     * 获取当前训练营的可选班级
     *
     * @param trainId 训练营Id
     * @param name    班主任
     * @return 查询结果
     */
    CommonResult getOptionalTrainClasses(Integer trainId, String name);

    /**
     * 分配班级
     * @param assignMember 学员列表
     * @param trainId 训练营ID
     */
    void assignToClass(TrainAssignMember assignMember, Integer trainId);

    /**
     * 创建/更新作业
     * @param trainId 训练营id
     * @param params 作业参数
     */
    void addOrUpdateHomework(Integer trainId, TrainHomeworkCreateOrUpdate params);

    /**
     * 获取训练营作业列表
     *
     * @param trainId 训练营Id
     * @param query   分页参数
     * @return 查询结果
     */
    CommonResult getTrainHomework(Integer trainId, TrainHomeworkQuery query);

    /**
     * 删除训练营作业
     * @param homeworkId 作业id
     * @param trainId 训练营id
     */
    void deleteHomework(Integer homeworkId, Integer trainId);

    /**
     * 获取训练营下拉
     * @param search 训练营名字
     * @return 查询结果
     */
    CommonResult getTrainDown(String search);

    /**
     * 获取训练营类型
     * @return 查询结果
     */
    CommonResult getTrainType();

    void test();

}
